package com.shangke.corejava.ch6;

//类指的是类型，是由多个具有相同特征的实物（对象），抽象出来的
public class Practise {// 我们所需找出的对象有以下几种
	// 名字
	private String name;
	// 武器
	private String weapon;
	// 战斗力
	private int attack;
	// 耐力
	private int endurance;

	public static void main(String[] args) {
		Practise sun = new Practise("孙悟空", "金箍棒", 5, 5);
		sun.fighting();
		sun.defense();

		Practise tang = new Practise("唐僧", "无", 0, 5);
		tang.fighting();
		tang.defense();

		Practise zhu = new Practise("猪八戒", "耙子", 4, 2);
		zhu.fighting();
		zhu.defense();

		Practise sha = new Practise("沙僧", "月牙铲", 3, 4);
		sha.fighting();
		sha.defense();

		Practise rPractise = null;
		// 超出生命周期、通知回收器回收
		for (int i = 0; i < 100000000; i++) {
			// 在循环外，超出生命周期的对象都是垃圾，可以进行回收
			Practise practise = new Practise();
			rPractise = new Practise();
		}
		System.gc();// 通知垃圾回收器回收垃圾；jvm收到通知后，会跳读GC进行内存回放
		// 内存泄露：当有一堆内存一直有栈指针执行它，这块堆内存则无法进行回收；
	}

	// 一个类编写了带参构造方法后，会屏蔽默认的空参构造方法
	// 如果需要使用空参构造方法，必须显示编写一个
	public Practise() {
		// super();
	}

	public Practise(String name, String weapon, int attack, int endurance) {
		super();
		this.name = name;
		this.weapon = weapon;
		this.attack = attack;
		this.endurance = endurance;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getWeapon() {
		return weapon;
	}

	public void setWeapon(String weapon) {
		this.weapon = weapon;
	}

	public int getAttack() {
		return attack;
	}

	public void setAttack(int attack) {
		this.attack = attack;
	}

	public int getEndurance() {
		return endurance;
	}

	public void setEndurance(int endurance) {
		this.endurance = endurance;
	}

	// 战斗
	public void fighting() {
		System.out.println(name + "在战斗");
	}

	// 防御
	public void defense() {
		System.out.println(name + "在防御");
	}

}
